package main

import (
	"fmt"
	"strings"
)

// 包 strings 中的 Map() 函数和 strings.IndexFunc() 一样都是非常好的使用例子。
// 请学习它的源代码并基于该函数书写一个程序，
// 要求将指定文本内的所有非 ASCII 字符替换成问号 '?' 或空格 ' '。
// 您需要怎么做才能删除这些字符呢？

func MakeMapping(rep rune) func(rune) rune {
	return func(r rune) rune {
		if r < 128 {
			return r
		}
		return rep
	}
}

func replaceAscii(s string, r rune) (n string) {
	mapping := MakeMapping(r)
	n = strings.Map(mapping, s)
	return
}

func main() {
	// 替换 Jérôme Österreich 中的所有非ASCII字符为'?'或' '
	str := "Jérôme Österreich"
	fmt.Printf("%s unascii replace to ?: %s\n", str, replaceAscii(str, rune('?')))
	fmt.Printf("%s unascii replace to ' ': %s\n", str, replaceAscii(str, rune(' ')))
}
